home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / c / genmo112.lha / GTB-Modula / Modules / Memory.mod < prev    next >
Encoding:
Modula Implementation  |  1993-09-28  |  1.6 KB  |  82 lines

  1. IMPLEMENTATION MODULE Memory;
  2.  
  3. (*
  4.  * -------------------------------------------------------------------------
  5.  *
  6.  *    :Module.    Memory
  7.  *    :Contents.    Modul zur kontrollierten Anforderung von Speicher
  8.  *
  9.  *    :Author.    Reiner Nix
  10.  *    :Address.    Geranienhof 2, 5000 Köln 71 Seeberg
  11.  *    :Address.    rbnix@pool.informatik.rwth-aachen.de
  12.  *    :Copyright.    Public Domain
  13.  *    :Language.    Modula-2
  14.  *    :Translator.    M2Amiga A-L V4.2d
  15.  *    :History.    V1.0    08.08.93
  16.  *
  17.  * -------------------------------------------------------------------------
  18.  *)
  19.  
  20. FROM    SYSTEM        IMPORT    ADDRESS, ADR;
  21. FROM    Arts        IMPORT    programName,
  22.                 Requester;
  23. FROM    Conversions    IMPORT    ValToStr;
  24. IMPORT Heap;
  25.  
  26.  
  27. VAR    error        :BOOLEAN;
  28.     t1        :ARRAY [0..10] OF CHAR;
  29.     text        :ARRAY [0..50] OF CHAR;
  30.  
  31.  
  32. PROCEDURE Allocate    (VAR adr        :ADDRESS;
  33.                  size        :LONGINT);
  34.  
  35. VAR    wiederholen    :BOOLEAN;
  36.  
  37.  
  38.   PROCEDURE CopyChars    (VAR source        :ARRAY OF CHAR;
  39.                    dest        :ARRAY OF CHAR;
  40.                    start, length    :CARDINAL);
  41.  
  42.   VAR    i    :CARDINAL;
  43.  
  44.   BEGIN
  45.   i := 0;
  46.   WHILE (0 < length) AND (dest[i] # 0C) DO
  47.     source[start] := dest[i];
  48.     INC (i);
  49.     INC (start);
  50.     DEC (length)
  51.     END
  52.   END CopyChars;
  53.  
  54.  
  55. (* Allocate *)
  56. BEGIN
  57. ValToStr (size, TRUE, t1, 10, 8, " ", error);
  58. CopyChars (text, t1, 24, 8);
  59.   REPEAT
  60.   Heap.Allocate (adr, size);
  61.  
  62.   IF adr=NIL THEN
  63.     wiederholen := Requester (programName, ADR (text), ADR ("wiederholen"), ADR ("abbrechen"));
  64.     END
  65.   UNTIL (adr#NIL) OR ((adr=NIL) AND (NOT wiederholen))
  66. END Allocate;
  67.  
  68.  
  69. PROCEDURE Deallocate    (VAR adr        :ADDRESS;
  70.                  size        :LONGINT);
  71.  
  72.  
  73. BEGIN
  74. Heap.Deallocate (adr)
  75. END Deallocate;
  76.  
  77.  
  78. BEGIN
  79. text := "Speicheranforderung von 12345678 Bytes mißlungen";
  80. END Memory.
  81.  
  82.